macro Updatefunc(size) // ; real l1 = 0; real l2 = 1e9; real move = 0.2; real lmid = 0; real volfrac2 = 0.5; //real size; //{ // ifstream siz("xkfil.txt"); // siz >> size; //} real[int] dc(size); { ifstream dcin("dc.txt"); dcin >> dc; } real[int] xkfil3(size); { ifstream xkin("xkfil.txt"); xkin >> xkfil3; } real sum; real[int] xnew(size); real[int] ch(size); real diff; while ((l2-l1)/(l1+l2) > 1e-3){ sum=0; lmid = 0.5*(l2+l1); for (int i=0; i < size; i++){ xnew(i) = max(0.0, max(xkfil3(i)-move,min(1.0,min(xkfil3(i)*sqrt((-dc(i)/lmid)),xkfil3(i)+move)))); } for (int i=0; i < size; i++){ sum = xnew(i) + sum; } if (sum > volfrac2*size){ l1=lmid; } else{ l2=lmid; } for (int i=0; i < size; i++){ ch(i) = abs(xnew(i)-xkfil3(i)); } diff = ch.linfty; for (int i=0; i < size; i++){ xkfil3(i) = xnew(i); } cout << "Max diff = " << diff << endl; {ofstream xkout("xnew.txt"); xkout << xkfil3 << endl; } } {ofstream diffout("difference.txt"); diffout << diff << endl; } {ofstream chout("change.txt"); chout << ch << endl; } cout << "Sum = " << sum << endl; cout << "Dens = " << volfrac2*size << endl; //End