Statistiques
| Révision :

root / bin / cell_division2.cpp @ 1

Historique | Voir | Annoter | Télécharger (22,97 ko)

1 1 akiss
#include "cell_division2.h"
2 1 akiss
#include "compute_barycenters.h"
3 1 akiss
#include "compute_shapes.h"
4 1 akiss
#include "constants.h"
5 1 akiss
#include <stdio.h>
6 1 akiss
#include <stdlib.h>
7 1 akiss
#include <omp.h>
8 1 akiss
#include "compute_areas.h"
9 1 akiss
#include "compute_cell_areas.h"
10 1 akiss
#include "compute_lengths.h"
11 1 akiss
#include "compute_wall_vertices.h"
12 1 akiss
13 1 akiss
/* this function reorganizes various lists after a division (cells_vertices, vertices_number_in_each_cell, wall_vertices, p, boundary, targets, target_lengths, target_areas) */
14 1 akiss
15 1 akiss
void cell_division2(double *vertices, int vertices_number, int *cells_vertices, int *vertices_number_in_each_cell, int cell_number, int *wall_vertices, int wall_number,
16 1 akiss
          double *barycenters, double *areas, double *cell_areas, double *lengths, double *target_lengths, double *shapes, double *targets,
17 1 akiss
          int dividing_cell, int *boundary, int *border, int adjacent_cells_number, int adjacent_cell1, int adjacent_cell2,
18 1 akiss
          int *daughter_cells_vertices_number, int *cell1, int *cell2, int *wall1, int *wall2){
19 1 akiss
20 1 akiss
//double old_area=cell_areas[dividing_cell];
21 1 akiss
double old_shape[3]={shapes[3*dividing_cell],shapes[3*dividing_cell+1],shapes[3*dividing_cell+2]};
22 1 akiss
double old_target_shape[3]={targets[3*dividing_cell],targets[3*dividing_cell+1],targets[3*dividing_cell+2]};
23 1 akiss
double old_shape_adjacent_cell1[3]={shapes[3*adjacent_cell1],shapes[3*adjacent_cell1+1],shapes[3*adjacent_cell1+2]};
24 1 akiss
double old_target_shape_adjacent_cell1[3]={targets[3*adjacent_cell1],targets[3*adjacent_cell1+1],targets[3*adjacent_cell1+2]};
25 1 akiss
double old_shape_adjacent_cell2[3]={shapes[3*adjacent_cell2],shapes[3*adjacent_cell2+1],shapes[3*adjacent_cell2+2]};
26 1 akiss
double old_target_shape_adjacent_cell2[3]={targets[3*adjacent_cell2],targets[3*adjacent_cell2+1],targets[3*adjacent_cell2+2]};
27 1 akiss
28 1 akiss
int old_boundary[vertices_number_in_each_cell[cell_number-1]];
29 1 akiss
for (int i=0;i<vertices_number_in_each_cell[cell_number-1];i++){
30 1 akiss
    old_boundary[i]=boundary[i];
31 1 akiss
}
32 1 akiss
33 1 akiss
int previous,j,k,delta,first,second,third;
34 1 akiss
/* saving of the old lists "vertices_number_in_each_cell" and "cells_vertices", usefull in the computation of the new ones */
35 1 akiss
int old_vertices_number_in_each_cell[cell_number];
36 1 akiss
for (int i=0;i<cell_number;i++){old_vertices_number_in_each_cell[i]=vertices_number_in_each_cell[i];}
37 1 akiss
int old_cells_vertices[old_vertices_number_in_each_cell[cell_number-1]];
38 1 akiss
for (int i=0;i<old_vertices_number_in_each_cell[cell_number-1];i++){old_cells_vertices[i]=cells_vertices[i];}
39 1 akiss
40 1 akiss
/* case 1: 2 adjacent cells have to be modified */
41 1 akiss
if (adjacent_cells_number==2){
42 1 akiss
    delta=daughter_cells_vertices_number[0]-(vertices_number_in_each_cell[dividing_cell+1]-vertices_number_in_each_cell[dividing_cell]);
43 1 akiss
44 1 akiss
/* case 1.1: the dividing cell has a smaller index than the adjacent cells */
45 1 akiss
if (dividing_cell<adjacent_cell1){ first=dividing_cell; second=adjacent_cell1; third=adjacent_cell2;
46 1 akiss
    for (int i=dividing_cell+1;i<adjacent_cell1+1;i++){vertices_number_in_each_cell[i]+=delta;}
47 1 akiss
    for (int i=adjacent_cell1+1;i<adjacent_cell2+1;i++){vertices_number_in_each_cell[i]+=delta+1;}
48 1 akiss
    for (int i=adjacent_cell2+1;i<cell_number;i++){vertices_number_in_each_cell[i]+=delta+2;}
49 1 akiss
}
50 1 akiss
/* case 1.2: the dividing cell has a bigger index than the adjacent cells */
51 1 akiss
else if (dividing_cell>adjacent_cell2){ first=adjacent_cell1; second=adjacent_cell2; third=dividing_cell;
52 1 akiss
    for (int i=adjacent_cell1+1;i<adjacent_cell2+1;i++){vertices_number_in_each_cell[i]+=1;}
53 1 akiss
    for (int i=adjacent_cell2+1;i<dividing_cell+1;i++){vertices_number_in_each_cell[i]+=2;}
54 1 akiss
    for (int i=dividing_cell+1;i<cell_number;i++){vertices_number_in_each_cell[i]+=delta+2;}
55 1 akiss
}
56 1 akiss
/* case 1.3: the dividing cell is between the adjacent cells */
57 1 akiss
else{ first=adjacent_cell1; second=dividing_cell; third=adjacent_cell2;
58 1 akiss
    for (int i=adjacent_cell1+1;i<dividing_cell+1;i++){vertices_number_in_each_cell[i]+=1;}
59 1 akiss
    for (int i=dividing_cell+1;i<adjacent_cell2+1;i++){vertices_number_in_each_cell[i]+=delta+1;}
60 1 akiss
    for (int i=adjacent_cell2+1;i<cell_number;i++){vertices_number_in_each_cell[i]+=delta+2;}
61 1 akiss
}
62 1 akiss
vertices_number_in_each_cell[cell_number]=vertices_number_in_each_cell[cell_number-1]+daughter_cells_vertices_number[1];
63 1 akiss
64 1 akiss
for (int i=vertices_number_in_each_cell[dividing_cell];i<vertices_number_in_each_cell[dividing_cell+1];i++){
65 1 akiss
    cells_vertices[i]=cell1[i-vertices_number_in_each_cell[dividing_cell]];}
66 1 akiss
67 1 akiss
k=0;
68 1 akiss
previous=vertices_number_in_each_cell[adjacent_cell1+1]-2;
69 1 akiss
for (int i=vertices_number_in_each_cell[adjacent_cell1];i<vertices_number_in_each_cell[adjacent_cell1+1]-1;i++){
70 1 akiss
    if (((wall1[1]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell1]+i-vertices_number_in_each_cell[adjacent_cell1]] &&
71 1 akiss
            wall1[0]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell1]+previous-vertices_number_in_each_cell[adjacent_cell1]])) && k==0){
72 1 akiss
        cells_vertices[i]=vertices_number-2; k++;}
73 1 akiss
    if (((wall2[1]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell1]+i-vertices_number_in_each_cell[adjacent_cell1]] &&
74 1 akiss
            wall2[0]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell1]+previous-vertices_number_in_each_cell[adjacent_cell1]])) && k==0){
75 1 akiss
        cells_vertices[i]=vertices_number-1; k++;}
76 1 akiss
    cells_vertices[i+k]=old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell1]+i-vertices_number_in_each_cell[adjacent_cell1]];
77 1 akiss
    previous=i;
78 1 akiss
}
79 1 akiss
80 1 akiss
k=0;
81 1 akiss
previous=vertices_number_in_each_cell[adjacent_cell2+1]-2;
82 1 akiss
for (int i=vertices_number_in_each_cell[adjacent_cell2];i<vertices_number_in_each_cell[adjacent_cell2+1]-1;i++){
83 1 akiss
    if (((wall1[1]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell2]+i-vertices_number_in_each_cell[adjacent_cell2]] &&
84 1 akiss
            wall1[0]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell2]+previous-vertices_number_in_each_cell[adjacent_cell2]])) && k==0){
85 1 akiss
        cells_vertices[i]=vertices_number-2; k++;}
86 1 akiss
    if (((wall2[1]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell2]+i-vertices_number_in_each_cell[adjacent_cell2]] &&
87 1 akiss
            wall2[0]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell2]+previous-vertices_number_in_each_cell[adjacent_cell2]])) && k==0){
88 1 akiss
        cells_vertices[i]=vertices_number-1; k++;}
89 1 akiss
    cells_vertices[i+k]=old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell2]+i-vertices_number_in_each_cell[adjacent_cell2]];
90 1 akiss
    previous=i;
91 1 akiss
}
92 1 akiss
93 1 akiss
for (int i=vertices_number_in_each_cell[first+1];i<vertices_number_in_each_cell[second];i++){
94 1 akiss
    cells_vertices[i]=
95 1 akiss
    old_cells_vertices[old_vertices_number_in_each_cell[first+1]+i-vertices_number_in_each_cell[first+1]];}
96 1 akiss
for (int i=vertices_number_in_each_cell[second+1];i<vertices_number_in_each_cell[third];i++){
97 1 akiss
    cells_vertices[i]=
98 1 akiss
    old_cells_vertices[old_vertices_number_in_each_cell[second+1]+i-vertices_number_in_each_cell[second+1]];}
99 1 akiss
for (int i=vertices_number_in_each_cell[third+1];i<vertices_number_in_each_cell[cell_number-1];i++){
100 1 akiss
    cells_vertices[i]=old_cells_vertices[old_vertices_number_in_each_cell[third+1]+i-vertices_number_in_each_cell[third+1]];}
101 1 akiss
for (int i=vertices_number_in_each_cell[cell_number-1];i<vertices_number_in_each_cell[cell_number];i++){
102 1 akiss
    cells_vertices[i]=cell2[i-vertices_number_in_each_cell[cell_number-1]];}
103 1 akiss
}
104 1 akiss
/* case 2: 1 adjacent cell has to be modified */
105 1 akiss
if (adjacent_cells_number==1){
106 1 akiss
if (dividing_cell<adjacent_cell1){ first=dividing_cell; second=adjacent_cell1;
107 1 akiss
    delta=daughter_cells_vertices_number[0]-(vertices_number_in_each_cell[dividing_cell+1]-vertices_number_in_each_cell[dividing_cell]);
108 1 akiss
    for (int i=dividing_cell+1;i<adjacent_cell1+1;i++){vertices_number_in_each_cell[i]+=delta;}
109 1 akiss
    for (int i=adjacent_cell1+1;i<cell_number;i++){vertices_number_in_each_cell[i]+=delta+1;}
110 1 akiss
    vertices_number_in_each_cell[cell_number]=vertices_number_in_each_cell[cell_number-1]+daughter_cells_vertices_number[1];}
111 1 akiss
112 1 akiss
else if (dividing_cell>adjacent_cell1){ first=adjacent_cell1; second=dividing_cell;
113 1 akiss
    delta=daughter_cells_vertices_number[0]-(vertices_number_in_each_cell[dividing_cell+1]-vertices_number_in_each_cell[dividing_cell]);
114 1 akiss
    for (int i=adjacent_cell1+1;i<dividing_cell+1;i++){vertices_number_in_each_cell[i]+=1;}
115 1 akiss
    for (int i=dividing_cell+1;i<cell_number;i++){vertices_number_in_each_cell[i]+=delta+1;}
116 1 akiss
    vertices_number_in_each_cell[cell_number]=vertices_number_in_each_cell[cell_number-1]+daughter_cells_vertices_number[1];}
117 1 akiss
118 1 akiss
    for (int i=vertices_number_in_each_cell[dividing_cell];i<vertices_number_in_each_cell[dividing_cell+1];i++){
119 1 akiss
        cells_vertices[i]=cell1[i-vertices_number_in_each_cell[dividing_cell]];}
120 1 akiss
121 1 akiss
    k=0;
122 1 akiss
    previous=vertices_number_in_each_cell[adjacent_cell1+1]-2;
123 1 akiss
    for (int i=vertices_number_in_each_cell[adjacent_cell1];i<vertices_number_in_each_cell[adjacent_cell1+1]-1;i++){
124 1 akiss
        if (((wall1[1]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell1]+i-vertices_number_in_each_cell[adjacent_cell1]] &&
125 1 akiss
              wall1[0]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell1]+previous-vertices_number_in_each_cell[adjacent_cell1]])) && k==0){
126 1 akiss
            cells_vertices[i]=vertices_number-2; k++;}
127 1 akiss
        if (((wall2[1]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell1]+i-vertices_number_in_each_cell[adjacent_cell1]] &&
128 1 akiss
              wall2[0]==old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell1]+previous-vertices_number_in_each_cell[adjacent_cell1]])) && k==0){
129 1 akiss
            cells_vertices[i]=vertices_number-1; k++;}
130 1 akiss
        cells_vertices[i+k]=old_cells_vertices[old_vertices_number_in_each_cell[adjacent_cell1]+i-vertices_number_in_each_cell[adjacent_cell1]];
131 1 akiss
        previous=i;
132 1 akiss
    }
133 1 akiss
    for (int i=vertices_number_in_each_cell[first+1];i<vertices_number_in_each_cell[second];i++){
134 1 akiss
        cells_vertices[i]=
135 1 akiss
        old_cells_vertices[old_vertices_number_in_each_cell[first+1]+i-vertices_number_in_each_cell[first+1]];}
136 1 akiss
    for (int i=vertices_number_in_each_cell[second+1];i<vertices_number_in_each_cell[cell_number-1];i++){
137 1 akiss
        cells_vertices[i]=old_cells_vertices[old_vertices_number_in_each_cell[second+1]+i-vertices_number_in_each_cell[second+1]];}
138 1 akiss
    for (int i=vertices_number_in_each_cell[cell_number-1];i<vertices_number_in_each_cell[cell_number];i++){
139 1 akiss
        cells_vertices[i]=cell2[i-vertices_number_in_each_cell[cell_number-1]];}
140 1 akiss
}
141 1 akiss
142 1 akiss
/* case 3: no adjacent cell has to be modified */
143 1 akiss
    // impossible, except in very unusual cases
144 1 akiss
if (adjacent_cells_number==0){
145 1 akiss
    delta=daughter_cells_vertices_number[0]-(vertices_number_in_each_cell[dividing_cell+1]-vertices_number_in_each_cell[dividing_cell]);
146 1 akiss
    for (int i=dividing_cell+1;i<cell_number;i++){vertices_number_in_each_cell[i]+=delta;}
147 1 akiss
    vertices_number_in_each_cell[cell_number]=vertices_number_in_each_cell[cell_number-1]+daughter_cells_vertices_number[1];
148 1 akiss
    for (int i=vertices_number_in_each_cell[dividing_cell];i<vertices_number_in_each_cell[dividing_cell+1];i++){
149 1 akiss
        cells_vertices[i]=cell1[i-vertices_number_in_each_cell[dividing_cell]];}
150 1 akiss
    for (int i=vertices_number_in_each_cell[dividing_cell+1];i<vertices_number_in_each_cell[cell_number-1];i++){
151 1 akiss
        cells_vertices[i]=
152 1 akiss
        old_cells_vertices[old_vertices_number_in_each_cell[dividing_cell+1]+i-vertices_number_in_each_cell[dividing_cell+1]];}
153 1 akiss
    for (int i=vertices_number_in_each_cell[cell_number-1];i<vertices_number_in_each_cell[cell_number];i++){
154 1 akiss
        cells_vertices[i]=cell2[i-vertices_number_in_each_cell[cell_number-1]];}
155 1 akiss
}
156 1 akiss
///* concentrations in the daughter cells are the concentration in the mother */
157 1 akiss
//a[cell_number-1]=a[dividing_cell];
158 1 akiss
159 1 akiss
    // tracking of the walls which are on the boundary
160 1 akiss
161 1 akiss
/* tracking of the walls which were not modified by the division */
162 1 akiss
int next,previous2,previous3;
163 1 akiss
164 1 akiss
for (int i=0;i<cell_number-1;i++){
165 1 akiss
    previous=vertices_number_in_each_cell[i+1]-1;
166 1 akiss
    for (j=vertices_number_in_each_cell[i];j<vertices_number_in_each_cell[i+1];j++){
167 1 akiss
        previous2=old_vertices_number_in_each_cell[i+1]-1;
168 1 akiss
        for (k=old_vertices_number_in_each_cell[i];k<old_vertices_number_in_each_cell[i+1];k++){
169 1 akiss
            if (cells_vertices[previous]==old_cells_vertices[previous2] && cells_vertices[j]==old_cells_vertices[k]){
170 1 akiss
//            p[j]=old_p[k];
171 1 akiss
            boundary[j]=old_boundary[k];
172 1 akiss
            }
173 1 akiss
        previous2=k;}
174 1 akiss
    previous=j;}
175 1 akiss
}
176 1 akiss
    /* tracking of the walls from cell #cell_number which were not modified by the division */
177 1 akiss
178 1 akiss
for (int i=vertices_number_in_each_cell[cell_number-1];i<vertices_number_in_each_cell[cell_number];i++){
179 1 akiss
    previous=i-1; if (i==vertices_number_in_each_cell[cell_number-1]){previous=vertices_number_in_each_cell[cell_number]-1;}
180 1 akiss
    previous2=old_vertices_number_in_each_cell[dividing_cell+1]-1;
181 1 akiss
    for (k=old_vertices_number_in_each_cell[dividing_cell];k<old_vertices_number_in_each_cell[dividing_cell+1];k++){
182 1 akiss
        if (cells_vertices[previous]==old_cells_vertices[previous2] && cells_vertices[i]==old_cells_vertices[k]){
183 1 akiss
//        p[i]=old_p[k];
184 1 akiss
        boundary[i]=old_boundary[k];
185 1 akiss
        }
186 1 akiss
    previous2=k;}
187 1 akiss
}
188 1 akiss
189 1 akiss
    /* tracking of the walls from the daughters which were modified by the division */
190 1 akiss
191 1 akiss
for (int i=old_vertices_number_in_each_cell[dividing_cell];i<old_vertices_number_in_each_cell[dividing_cell+1];i++){
192 1 akiss
    previous=i-1; if (i==old_vertices_number_in_each_cell[dividing_cell]){previous=old_vertices_number_in_each_cell[dividing_cell+1]-1;}
193 1 akiss
    previous2=vertices_number_in_each_cell[dividing_cell+1]-1;
194 1 akiss
    for (j=vertices_number_in_each_cell[dividing_cell];j<vertices_number_in_each_cell[dividing_cell+1];j++){
195 1 akiss
        previous3=vertices_number_in_each_cell[cell_number]-1;
196 1 akiss
        for (k=vertices_number_in_each_cell[cell_number-1];k<vertices_number_in_each_cell[cell_number];k++){
197 1 akiss
            if ((old_cells_vertices[previous]==cells_vertices[previous2] && cells_vertices[previous3]==cells_vertices[j]) &&
198 1 akiss
                (old_cells_vertices[i]==cells_vertices[k])){
199 1 akiss
//                    p[j]=old_p[i];
200 1 akiss
//                    p[k]=old_p[i];
201 1 akiss
                    boundary[j]=old_boundary[i];
202 1 akiss
                    boundary[k]=old_boundary[i];
203 1 akiss
            }
204 1 akiss
            if ((old_cells_vertices[previous]==cells_vertices[previous3] && cells_vertices[previous2]==cells_vertices[k]) &&
205 1 akiss
                (old_cells_vertices[i]==cells_vertices[j])){
206 1 akiss
//                    p[j]=old_p[previous];
207 1 akiss
//                    p[k]=old_p[previous];
208 1 akiss
                    boundary[j]=old_boundary[i];
209 1 akiss
                    boundary[k]=old_boundary[i];
210 1 akiss
            }
211 1 akiss
        previous3=k;}
212 1 akiss
    previous2=j;}
213 1 akiss
}
214 1 akiss
215 1 akiss
    /* tracking of the new cell wall */
216 1 akiss
for (int i=vertices_number_in_each_cell[dividing_cell];i<vertices_number_in_each_cell[dividing_cell+1];i++){
217 1 akiss
    previous2=i-1; if(i==vertices_number_in_each_cell[dividing_cell]){previous2=vertices_number_in_each_cell[dividing_cell+1]-1;}
218 1 akiss
    previous3=vertices_number_in_each_cell[cell_number]-1;
219 1 akiss
    for (k=vertices_number_in_each_cell[cell_number-1];k<vertices_number_in_each_cell[cell_number];k++){
220 1 akiss
        if (cells_vertices[previous2]==cells_vertices[k] && cells_vertices[i]==cells_vertices[previous3]){
221 1 akiss
//            p[i]=production_coeff_p/degradation_coeff_p;
222 1 akiss
//            p[k]=production_coeff_p/degradation_coeff_p;
223 1 akiss
            boundary[i]=0;
224 1 akiss
            boundary[k]=0;
225 1 akiss
            }
226 1 akiss
    previous3=k;}
227 1 akiss
}
228 1 akiss
229 1 akiss
230 1 akiss
    /* tracking of the walls from the neighbours which were modified by the division */
231 1 akiss
if (adjacent_cells_number>0){
232 1 akiss
    previous2=old_vertices_number_in_each_cell[adjacent_cell1+1]-1;
233 1 akiss
    for (int i=old_vertices_number_in_each_cell[adjacent_cell1];i<old_vertices_number_in_each_cell[adjacent_cell1+1];i++){
234 1 akiss
        previous=vertices_number_in_each_cell[adjacent_cell1+1]-1;
235 1 akiss
        for (j=vertices_number_in_each_cell[adjacent_cell1];j<vertices_number_in_each_cell[adjacent_cell1+1];j++){
236 1 akiss
            next=j+1; if (next==vertices_number_in_each_cell[adjacent_cell1+1]){next=vertices_number_in_each_cell[adjacent_cell1];}
237 1 akiss
            if (cells_vertices[next]==old_cells_vertices[i] && cells_vertices[previous]==old_cells_vertices[previous2]){
238 1 akiss
//                p[j]=old_p[i];
239 1 akiss
//                p[next]=old_p[i];
240 1 akiss
                boundary[j]=old_boundary[i];
241 1 akiss
                boundary[next]=old_boundary[i];
242 1 akiss
                }
243 1 akiss
        previous=j;}
244 1 akiss
    previous2=i;}
245 1 akiss
}
246 1 akiss
247 1 akiss
if (adjacent_cells_number==2){
248 1 akiss
    previous2=old_vertices_number_in_each_cell[adjacent_cell2+1]-1;
249 1 akiss
    for (int i=old_vertices_number_in_each_cell[adjacent_cell2];i<old_vertices_number_in_each_cell[adjacent_cell2+1];i++){
250 1 akiss
        previous=vertices_number_in_each_cell[adjacent_cell2+1]-1;
251 1 akiss
        for (j=vertices_number_in_each_cell[adjacent_cell2];j<vertices_number_in_each_cell[adjacent_cell2+1];j++){
252 1 akiss
            next=j+1; if (next==vertices_number_in_each_cell[adjacent_cell2+1]){next=vertices_number_in_each_cell[adjacent_cell2];}
253 1 akiss
            if (cells_vertices[next]==old_cells_vertices[i] && cells_vertices[previous]==old_cells_vertices[previous2]){
254 1 akiss
//                p[j]=old_p[i];
255 1 akiss
//                p[next]=old_p[i];
256 1 akiss
                boundary[j]=old_boundary[i];
257 1 akiss
                boundary[next]=old_boundary[i];
258 1 akiss
                }
259 1 akiss
        previous=j;}
260 1 akiss
    previous2=i;}
261 1 akiss
}
262 1 akiss
263 1 akiss
    // updating the list "wall_vertices" and the lengths of the walls
264 1 akiss
double old_wall_vertices[2*wall_number-6];
265 1 akiss
for (int i=0;i<2*wall_number-6;i++){old_wall_vertices[i]=wall_vertices[i];}
266 1 akiss
double old_target_lengths[wall_number-3];
267 1 akiss
for (int i=0;i<wall_number-3;i++){old_target_lengths[i]=target_lengths[i];}
268 1 akiss
double old_length1, old_target_length1, old_length2, old_target_length2;
269 1 akiss
for (int i=0;i<wall_number-3;i++){
270 1 akiss
    if ((wall_vertices[2*i]==wall1[0] && wall_vertices[2*i+1]==wall1[1]) || (wall_vertices[2*i]==wall1[1] && wall_vertices[2*i+1]==wall1[0])){
271 1 akiss
        old_length1=lengths[i]; old_target_length1=target_lengths[i];
272 1 akiss
    }
273 1 akiss
    if ((wall_vertices[2*i]==wall2[0] && wall_vertices[2*i+1]==wall2[1]) || (wall_vertices[2*i]==wall2[1] && wall_vertices[2*i+1]==wall2[0])){
274 1 akiss
        old_length2=lengths[i]; old_target_length2=target_lengths[i];
275 1 akiss
    }
276 1 akiss
}
277 1 akiss
278 1 akiss
compute_wall_vertices( cells_vertices, vertices_number_in_each_cell, cell_number, wall_vertices);
279 1 akiss
compute_lengths(vertices, wall_vertices, wall_number, lengths);
280 1 akiss
281 1 akiss
for (int i=0;i<wall_number;i++){
282 1 akiss
    for (j=0;j<wall_number-3;j++){
283 1 akiss
        if ((wall_vertices[2*i]==old_wall_vertices[2*j] && wall_vertices[2*i+1]==old_wall_vertices[2*j+1]) || (wall_vertices[2*i]==old_wall_vertices[2*j+1] && wall_vertices[2*i+1]==old_wall_vertices[2*j])){
284 1 akiss
            target_lengths[i]=old_target_lengths[j]; //goto next_wall;
285 1 akiss
        }
286 1 akiss
    }
287 1 akiss
    if ((wall_vertices[2*i]==wall1[0] && wall_vertices[2*i+1]==vertices_number-2) || (wall_vertices[2*i]==wall1[1] && wall_vertices[2*i+1]==vertices_number-2) ||
288 1 akiss
        (wall_vertices[2*i+1]==wall1[0] && wall_vertices[2*i]==vertices_number-2) || (wall_vertices[2*i+1]==wall1[1] && wall_vertices[2*i]==vertices_number-2)){
289 1 akiss
        target_lengths[i]=lengths[i]*old_target_length1/old_length1;
290 1 akiss
    }
291 1 akiss
    if ((wall_vertices[2*i]==wall2[0] && wall_vertices[2*i+1]==vertices_number-1) || (wall_vertices[2*i]==wall2[1] && wall_vertices[2*i+1]==vertices_number-1) ||
292 1 akiss
        (wall_vertices[2*i+1]==wall2[0] && wall_vertices[2*i]==vertices_number-1) || (wall_vertices[2*i+1]==wall2[1] && wall_vertices[2*i]==vertices_number-1)){
293 1 akiss
        target_lengths[i]=lengths[i]*old_target_length2/old_length2;
294 1 akiss
    }
295 1 akiss
    if ((wall_vertices[2*i]==vertices_number-1 && wall_vertices[2*i+1]==vertices_number-2) ||
296 1 akiss
        (wall_vertices[2*i+1]==vertices_number-1 && wall_vertices[2*i]==vertices_number-2) ){
297 1 akiss
        target_lengths[i]=lengths[i];
298 1 akiss
    }
299 1 akiss
}
300 1 akiss
301 1 akiss
/* computation of values which are modified by the division */ //printf("cell division 2\n"); int bug[1]={0};
302 1 akiss
compute_barycenters(vertices,vertices_number,cells_vertices,vertices_number_in_each_cell,cell_number,barycenters);
303 1 akiss
compute_shapes(vertices, cells_vertices, vertices_number_in_each_cell, cell_number, barycenters, shapes);
304 1 akiss
compute_areas(vertices, cells_vertices, vertices_number_in_each_cell, cell_number, areas);
305 1 akiss
compute_cell_areas(vertices, cells_vertices, vertices_number_in_each_cell, cell_number, areas, cell_areas);
306 1 akiss
307 1 akiss
    // definition of the new targets, to keep stress constant, on the daughters
308 1 akiss
targets[3*dividing_cell]=shapes[3*dividing_cell]+(shapes[3*dividing_cell]+shapes[3*dividing_cell+1])*(old_target_shape[0]-old_shape[0])/(old_shape[0]+old_shape[1]);
309 1 akiss
targets[3*dividing_cell+1]=shapes[3*dividing_cell+1]+(shapes[3*dividing_cell]+shapes[3*dividing_cell+1])*(old_target_shape[1]-old_shape[1])/(old_shape[0]+old_shape[1]);
310 1 akiss
targets[3*dividing_cell+2]=shapes[3*dividing_cell+2]+(shapes[3*dividing_cell]+shapes[3*dividing_cell+1])*(old_target_shape[2]-old_shape[2])/(old_shape[0]+old_shape[1]);
311 1 akiss
targets[3*(cell_number-1)]=shapes[3*(cell_number-1)]+(shapes[3*(cell_number-1)]+shapes[3*(cell_number-1)+1])*(old_target_shape[0]-old_shape[0])/(old_shape[0]+old_shape[1]);
312 1 akiss
targets[3*(cell_number-1)+1]=shapes[3*(cell_number-1)+1]+(shapes[3*(cell_number-1)]+shapes[3*(cell_number-1)+1])*(old_target_shape[1]-old_shape[1])/(old_shape[0]+old_shape[1]);
313 1 akiss
targets[3*(cell_number-1)+2]=shapes[3*(cell_number-1)+2]+(shapes[3*(cell_number-1)]+shapes[3*(cell_number-1)+1])*(old_target_shape[2]-old_shape[2])/(old_shape[0]+old_shape[1]);
314 1 akiss
315 1 akiss
    // definition of the new targets, to keep stress constant, on the neighbours
316 1 akiss
if (adjacent_cells_number>0){
317 1 akiss
targets[3*adjacent_cell1]=shapes[3*adjacent_cell1]+(shapes[3*adjacent_cell1]+shapes[3*adjacent_cell1+1])*(old_target_shape_adjacent_cell1[0]-old_shape_adjacent_cell1[0])/(old_shape_adjacent_cell1[0]+old_shape_adjacent_cell1[1]);
318 1 akiss
targets[3*adjacent_cell1+1]=shapes[3*adjacent_cell1+1]+(shapes[3*adjacent_cell1]+shapes[3*adjacent_cell1+1])*(old_target_shape_adjacent_cell1[1]-old_shape_adjacent_cell1[1])/(old_shape_adjacent_cell1[0]+old_shape_adjacent_cell1[1]);
319 1 akiss
targets[3*adjacent_cell1+2]=shapes[3*adjacent_cell1+2]+(shapes[3*adjacent_cell1]+shapes[3*adjacent_cell1+1])*(old_target_shape_adjacent_cell1[2]-old_shape_adjacent_cell1[2])/(old_shape_adjacent_cell1[0]+old_shape_adjacent_cell1[1]);
320 1 akiss
if (adjacent_cells_number==2){
321 1 akiss
targets[3*adjacent_cell2]=shapes[3*adjacent_cell2]+(shapes[3*adjacent_cell2]+shapes[3*adjacent_cell2+1])*(old_target_shape_adjacent_cell2[0]-old_shape_adjacent_cell2[0])/(old_shape_adjacent_cell2[0]+old_shape_adjacent_cell2[1]);
322 1 akiss
targets[3*adjacent_cell2+1]=shapes[3*adjacent_cell2+1]+(shapes[3*adjacent_cell2]+shapes[3*adjacent_cell2+1])*(old_target_shape_adjacent_cell2[1]-old_shape_adjacent_cell2[1])/(old_shape_adjacent_cell2[0]+old_shape_adjacent_cell2[1]);
323 1 akiss
targets[3*adjacent_cell2+2]=shapes[3*adjacent_cell2+2]+(shapes[3*adjacent_cell2]+shapes[3*adjacent_cell2+1])*(old_target_shape_adjacent_cell2[2]-old_shape_adjacent_cell2[2])/(old_shape_adjacent_cell2[0]+old_shape_adjacent_cell2[1]);
324 1 akiss
}
325 1 akiss
}
326 1 akiss
// tracking the cells which were on the border of the tissue (this is just inherited from the mother)
327 1 akiss
border[dividing_cell]=0;
328 1 akiss
for (int j=vertices_number_in_each_cell[dividing_cell]; j<vertices_number_in_each_cell[dividing_cell+1];j++){
329 1 akiss
    if (boundary[j]==1.){ border[dividing_cell]=1; }
330 1 akiss
}
331 1 akiss
border[cell_number-1]=0;
332 1 akiss
for (int j=vertices_number_in_each_cell[cell_number-1]; j<vertices_number_in_each_cell[cell_number];j++){
333 1 akiss
    if (boundary[j]==1.){ border[cell_number-1]=1; }
334 1 akiss
}
335 1 akiss
336 1 akiss
337 1 akiss
}