diff --git a/DOUAR.f90 b/DOUAR.f90 index 68db5bdb7ad0c7ae45788f84d8255ea302d711bd..7b335de6051142c913d103db776c1c548e546bbf 100644 --- a/DOUAR.f90 +++ b/DOUAR.f90 @@ -308,14 +308,22 @@ do while (istep.le.params%nstep) !---------------------------------------------------------------------------| do is=1,params%ns surface0(is)%nsurface=surface(is)%nsurface - allocate (surface0(is)%r(surface0(is)%nsurface),stat=threadinfo%err) ; call heap (threadinfo,'surface0(is)%r','main',size(surface0(is)%r),'dp',+1) - allocate (surface0(is)%s(surface0(is)%nsurface),stat=threadinfo%err) ; call heap (threadinfo,'surface0(is)%s','main',size(surface0(is)%s),'dp',+1) - allocate (surface0(is)%x(surface0(is)%nsurface),stat=threadinfo%err) ; call heap (threadinfo,'surface0(is)%x','main',size(surface0(is)%x),'dp',+1) - allocate (surface0(is)%y(surface0(is)%nsurface),stat=threadinfo%err) ; call heap (threadinfo,'surface0(is)%y','main',size(surface0(is)%y),'dp',+1) - allocate (surface0(is)%z(surface0(is)%nsurface),stat=threadinfo%err) ; call heap (threadinfo,'surface0(is)%z','main',size(surface0(is)%z),'dp',+1) - allocate (surface0(is)%xn(surface0(is)%nsurface),stat=threadinfo%err) ; call heap (threadinfo,'surface0(is)%xn','main',size(surface0(is)%xn),'dp',+1) - allocate (surface0(is)%yn(surface0(is)%nsurface),stat=threadinfo%err) ; call heap (threadinfo,'surface0(is)%yn','main',size(surface0(is)%yn),'dp',+1) - allocate (surface0(is)%zn(surface0(is)%nsurface),stat=threadinfo%err) ; call heap (threadinfo,'surface0(is)%zn','main',size(surface0(is)%zn),'dp',+1) + allocate (surface0(is)%r(surface0(is)%nsurface),stat=threadinfo%err) + call heap (threadinfo,'surface0(is)%r','main',size(surface0(is)%r),'dp',+1) + allocate (surface0(is)%s(surface0(is)%nsurface),stat=threadinfo%err) + call heap (threadinfo,'surface0(is)%s','main',size(surface0(is)%s),'dp',+1) + allocate (surface0(is)%x(surface0(is)%nsurface),stat=threadinfo%err) + call heap (threadinfo,'surface0(is)%x','main',size(surface0(is)%x),'dp',+1) + allocate (surface0(is)%y(surface0(is)%nsurface),stat=threadinfo%err) + call heap (threadinfo,'surface0(is)%y','main',size(surface0(is)%y),'dp',+1) + allocate (surface0(is)%z(surface0(is)%nsurface),stat=threadinfo%err) + call heap (threadinfo,'surface0(is)%z','main',size(surface0(is)%z),'dp',+1) + allocate (surface0(is)%xn(surface0(is)%nsurface),stat=threadinfo%err) + call heap (threadinfo,'surface0(is)%xn','main',size(surface0(is)%xn),'dp',+1) + allocate (surface0(is)%yn(surface0(is)%nsurface),stat=threadinfo%err) + call heap (threadinfo,'surface0(is)%yn','main',size(surface0(is)%yn),'dp',+1) + allocate (surface0(is)%zn(surface0(is)%nsurface),stat=threadinfo%err) + call heap (threadinfo,'surface0(is)%zn','main',size(surface0(is)%zn),'dp',+1) surface0(is)%r=surface(is)%r surface0(is)%s=surface(is)%s surface0(is)%x=surface(is)%x @@ -352,7 +360,8 @@ do while (istep.le.params%nstep) write(*,'(a,L1)') shift//'(1) params%griditer < 0 ',(params%griditer.lt.0) write(*,'(a,L1)') shift//'(2) current_level==params%levelmax_oct',(current_level==params%levelmax_oct) write(*,'(a,L1)') shift//'(3) increase_current_level ',increase_current_level - write(*,'(a,L1)') shift//'converge = (1) & (2) & (3) -> ',(params%griditer .lt. 0 .and. current_level==params%levelmax_oct .and. increase_current_level) + write(*,'(a,L1)') shift//'converge = (1) & (2) & (3) -> ',& + (params%griditer .lt. 0 .and. current_level==params%levelmax_oct .and. increase_current_level) end if @@ -374,7 +383,8 @@ do while (istep.le.params%nstep) osolve%noctree=params%noctreemax - allocate (osolve%octree(osolve%noctree),stat=threadinfo%err) ; call heap (threadinfo,'osolve%octree','main',size(osolve%octree),'int',+1) + allocate (osolve%octree(osolve%noctree),stat=threadinfo%err) + call heap (threadinfo,'osolve%octree','main',size(osolve%octree),'int',+1) call octree_init (osolve%octree,osolve%noctree) call octree_create_uniform (osolve%octree,osolve%noctree,params%leveluniform_oct) @@ -402,11 +412,16 @@ do while (istep.le.params%nstep) if (iproc.eq.0) write (8,*) osolve%nleaves,' leaves in solve octree ' - allocate (osolve%icon(8,osolve%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'osolve%icon','main',size(osolve%icon),'int',+1) - allocate (osolve%x(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'osolve%x', 'main',size(osolve%x),'dp',+1) - allocate (osolve%y(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'osolve%y', 'main',size(osolve%y),'dp',+1) - allocate (osolve%z(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'osolve%z', 'main',size(osolve%z),'dp',+1) - allocate (osolve%lsf(osolve%nnode,osolve%nlsf),stat=threadinfo%err) ; call heap (threadinfo,'osolve%lsf', 'main',size(osolve%lsf),'dp',+1) + allocate (osolve%icon(8,osolve%nleaves),stat=threadinfo%err) + call heap (threadinfo,'osolve%icon','main',size(osolve%icon),'int',+1) + allocate (osolve%x(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'osolve%x', 'main',size(osolve%x),'dp',+1) + allocate (osolve%y(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'osolve%y', 'main',size(osolve%y),'dp',+1) + allocate (osolve%z(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'osolve%z', 'main',size(osolve%z),'dp',+1) + allocate (osolve%lsf(osolve%nnode,osolve%nlsf),stat=threadinfo%err) + call heap (threadinfo,'osolve%lsf', 'main',size(osolve%lsf),'dp',+1) osolve%lsf=0.d0 call octree_find_node_connectivity (osolve%octree,osolve%noctree, & @@ -460,13 +475,20 @@ do while (istep.le.params%nstep) ! allocate fields of osolve !------------------------------------------------------------------------| !------------------------------------------------------------------------| - allocate (osolve%u(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'osolve%u','main',size(osolve%u),'dp',+1) - allocate (osolve%v(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'osolve%v','main',size(osolve%v),'dp',+1) - allocate (osolve%w(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'osolve%w','main',size(osolve%w),'dp',+1) - allocate (osolve%temp(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'osolve%temp','main',size(osolve%temp),'dp',+1) - allocate (osolve%pressure(osolve%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'osolve%pressure','main',size(osolve%pressure),'dp',+1) - allocate (osolve%spressure(osolve%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'osolve%spressure','main',size(osolve%spressure),'dp',+1) - allocate (osolve%strain(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'osolve%strain','main',size(osolve%strain),'dp',+1) + allocate (osolve%u(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'osolve%u','main',size(osolve%u),'dp',+1) + allocate (osolve%v(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'osolve%v','main',size(osolve%v),'dp',+1) + allocate (osolve%w(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'osolve%w','main',size(osolve%w),'dp',+1) + allocate (osolve%temp(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'osolve%temp','main',size(osolve%temp),'dp',+1) + allocate (osolve%pressure(osolve%nleaves),stat=threadinfo%err) + call heap (threadinfo,'osolve%pressure','main',size(osolve%pressure),'dp',+1) + allocate (osolve%spressure(osolve%nleaves),stat=threadinfo%err) + call heap (threadinfo,'osolve%spressure','main',size(osolve%spressure),'dp',+1) + allocate (osolve%strain(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'osolve%strain','main',size(osolve%strain),'dp',+1) osolve%u = 0.d0 osolve%v = 0.d0 osolve%w = 0.d0 @@ -505,7 +527,8 @@ do while (istep.le.params%nstep) call show_time (total,step,inc,1,'Find bad faces$') osolve%nface=osolve%nleaves - allocate (osolve%iface(9,osolve%nface),stat=threadinfo%err) ; call heap (threadinfo,'osolve%iface','main',size(osolve%iface),'int',+1) + allocate (osolve%iface(9,osolve%nface),stat=threadinfo%err) + call heap (threadinfo,'osolve%iface','main',size(osolve%iface),'int',+1) call octree_find_bad_faces (osolve%octree,osolve%noctree, & osolve%iface,osolve%nface, & @@ -523,12 +546,18 @@ do while (istep.le.params%nstep) !------------------------------------------------------------------------| call show_time (total,step,inc,1,'Find void$') - allocate (vo%node(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'vo%node','main',size(vo%node),'int',+1) - allocate (vo%leaf(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'vo%leaf','main',size(vo%leaf),'int',+1) - allocate (vo%face(osolve%nface),stat=threadinfo%err) ; call heap (threadinfo,'vo%face','main',size(vo%face),'int',+1) - allocate (vo%rtf(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'vo%rtf','main',size(vo%rtf),'int',+1) - allocate (vo%ftr(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'vo%ftr','main',size(vo%ftr),'int',+1) - allocate (vo%influid(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'vo%influid','main',size(vo%influid),'bool',+1) + allocate (vo%node(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'vo%node','main',size(vo%node),'int',+1) + allocate (vo%leaf(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'vo%leaf','main',size(vo%leaf),'int',+1) + allocate (vo%face(osolve%nface),stat=threadinfo%err) + call heap (threadinfo,'vo%face','main',size(vo%face),'int',+1) + allocate (vo%rtf(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'vo%rtf','main',size(vo%rtf),'int',+1) + allocate (vo%ftr(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'vo%ftr','main',size(vo%ftr),'int',+1) + allocate (vo%influid(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'vo%influid','main',size(vo%influid),'bool',+1) call find_void_nodes (params,osolve,vo,istep,ov,threadinfo) @@ -538,8 +567,10 @@ do while (istep.le.params%nstep) !------------------------------------------------------------------------| !------------------------------------------------------------------------| call show_time (total,step,inc,1,'Define boundary conditions$') - allocate (osolve%kfix(osolve%nnode*3),stat=threadinfo%err) ; call heap (threadinfo,'osolve%kfix','main',size(osolve%kfix),'int',+1) - allocate (osolve%kfixt(osolve%nnode),stat=threadinfo%err) ; call heap (threadinfo,'osolve%kfixt','main',size(osolve%kfixt),'int',+1) + allocate (osolve%kfix(osolve%nnode*3),stat=threadinfo%err) + call heap (threadinfo,'osolve%kfix','main',size(osolve%kfix),'int',+1) + allocate (osolve%kfixt(osolve%nnode),stat=threadinfo%err) + call heap (threadinfo,'osolve%kfixt','main',size(osolve%kfixt),'int',+1) call define_bc (params,osolve,vo) @@ -588,14 +619,22 @@ do while (istep.le.params%nstep) !------------------------------------------------------------------------| !------------------------------------------------------------------------| - allocate (osolve%eviscosity(osolve%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'osolve%eviscosity','main',size(osolve%eviscosity),'dp',+1) - allocate (osolve%q(osolve%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'osolve%q','main',size(osolve%q),'dp',+1) - allocate (osolve%crit(osolve%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'osolve%crit','main',size(osolve%crit),'dp',+1) - allocate (osolve%e2d(osolve%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'osolve%e2d','main',size(osolve%e2d),'dp',+1) - allocate (osolve%e3d(osolve%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'osolve%e3d','main',size(osolve%e3d),'dp',+1) - allocate (osolve%lode(osolve%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'osolve%lode','main',size(osolve%lode),'dp',+1) - allocate (osolve%is_plastic(osolve%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'osolve%is_plastic','main',size(osolve%is_plastic),'bool',+1) - allocate (weightel(osolve%nleaves)) ; call heap (threadinfo,'weightel','main',size(weightel),'bool',+1) + allocate (osolve%eviscosity(osolve%nleaves),stat=threadinfo%err) + call heap (threadinfo,'osolve%eviscosity','main',size(osolve%eviscosity),'dp',+1) + allocate (osolve%q(osolve%nleaves),stat=threadinfo%err) + call heap (threadinfo,'osolve%q','main',size(osolve%q),'dp',+1) + allocate (osolve%crit(osolve%nleaves),stat=threadinfo%err) + call heap (threadinfo,'osolve%crit','main',size(osolve%crit),'dp',+1) + allocate (osolve%e2d(osolve%nleaves),stat=threadinfo%err) + call heap (threadinfo,'osolve%e2d','main',size(osolve%e2d),'dp',+1) + allocate (osolve%e3d(osolve%nleaves),stat=threadinfo%err) + call heap (threadinfo,'osolve%e3d','main',size(osolve%e3d),'dp',+1) + allocate (osolve%lode(osolve%nleaves),stat=threadinfo%err) + call heap (threadinfo,'osolve%lode','main',size(osolve%lode),'dp',+1) + allocate (osolve%is_plastic(osolve%nleaves),stat=threadinfo%err) + call heap (threadinfo,'osolve%is_plastic','main',size(osolve%is_plastic),'bool',+1) + allocate (weightel(osolve%nleaves)) + call heap (threadinfo,'weightel','main',size(weightel),'bool',+1) !-------------------------------------------------------------------------------------- !-------------------------------------------------------------------------------------- @@ -731,8 +770,8 @@ do while (istep.le.params%nstep) call show_time (total,step,inc,1,'slicing the cube$') call slices(params,osolve,ov,vo,sections,istep,iter,iter_nl) - call heap (threadinfo,'osolve%eviscosity','main',size(osolve%eviscosity),'dp',-1) ; deallocate (osolve%eviscosity) - call heap (threadinfo,'osolve%q','main',size(osolve%q),'dp',-1) ; deallocate (osolve%q) + call heap (threadinfo,'osolve%eviscosity','main',size(osolve%eviscosity),'dp',-1) ; deallocate (osolve%eviscosity) + call heap (threadinfo,'osolve%q','main',size(osolve%q),'dp',-1) ; deallocate (osolve%q) !-------------------------------------------------------------------------------------- !-------------------------------------------------------------------------------------- ! compute isostasy @@ -784,7 +823,7 @@ do while (istep.le.params%nstep) if (.not.converge) then call heap (threadinfo,'osolve%octree','main',size(osolve%octree),'int',-1) ; deallocate (osolve%octree) - call heap (threadinfo,'osolve%icon','main',size(osolve%icon),'int',-1) ; deallocate (osolve%icon) + call heap (threadinfo,'osolve%icon','main',size(osolve%icon),'int',-1) ; deallocate (osolve%icon) call heap (threadinfo,'osolve%x','main',size(osolve%x),'dp',-1) ; deallocate (osolve%x) call heap (threadinfo,'osolve%y','main',size(osolve%y),'dp',-1) ; deallocate (osolve%y) call heap (threadinfo,'osolve%z','main',size(osolve%z),'dp',-1) ; deallocate (osolve%z) @@ -858,12 +897,18 @@ do while (istep.le.params%nstep) olsf%nleaves=ov%nleaves olsf%noctree=ov%noctree - allocate (olsf%octree(olsf%noctree),stat=threadinfo%err) ; call heap (threadinfo,'olsf%octree','main',size(olsf%octree),'int',+1) - allocate (olsf%x(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%x','main',size(olsf%x),'dp',+1) - allocate (olsf%y(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%y','main',size(olsf%y),'dp',+1) - allocate (olsf%z(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%z','main',size(olsf%z),'dp',+1) - allocate (olsf%lsf(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%lsf','main',size(olsf%lsf),'dp',+1) - allocate (olsf%icon(params%mpe,olsf%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'olsf%icon','main',size(olsf%icon),'int',+1) + allocate (olsf%octree(olsf%noctree),stat=threadinfo%err) + call heap (threadinfo,'olsf%octree','main',size(olsf%octree),'int',+1) + allocate (olsf%x(olsf%nnode),stat=threadinfo%err) + call heap (threadinfo,'olsf%x','main',size(olsf%x),'dp',+1) + allocate (olsf%y(olsf%nnode),stat=threadinfo%err) + call heap (threadinfo,'olsf%y','main',size(olsf%y),'dp',+1) + allocate (olsf%z(olsf%nnode),stat=threadinfo%err) + call heap (threadinfo,'olsf%z','main',size(olsf%z),'dp',+1) + allocate (olsf%lsf(olsf%nnode),stat=threadinfo%err) + call heap (threadinfo,'olsf%lsf','main',size(olsf%lsf),'dp',+1) + allocate (olsf%icon(params%mpe,olsf%nleaves),stat=threadinfo%err) + call heap (threadinfo,'olsf%icon','main',size(olsf%icon),'int',+1) olsf%octree(1:olsf%noctree)=ov%octree(1:ov%noctree) olsf%x(1:olsf%nnode)=ov%x(1:ov%nnode) @@ -1079,12 +1124,13 @@ do while (istep.le.params%nstep) olsf%nleaves=ov%nleaves olsf%noctree=ov%noctree - allocate (olsf%octree(olsf%noctree),stat=threadinfo%err) ; call heap (threadinfo,'olsf%octree','main',size(olsf%octree),'int',+1) - allocate (olsf%x(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%x','main',size(olsf%x),'dp',+1) - allocate (olsf%y(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%y','main',size(olsf%y),'dp',+1) - allocate (olsf%z(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%z','main',size(olsf%z),'dp',+1) - allocate (olsf%lsf(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%lsf','main',size(olsf%lsf),'dp',+1) - allocate (olsf%icon(params%mpe,olsf%nleaves),stat=threadinfo%err) ; call heap (threadinfo,'olsf%icon','main',size(olsf%icon),'int',+1) + allocate (olsf%octree(olsf%noctree),stat=threadinfo%err) ; call heap(threadinfo,'olsf%octree','main',size(olsf%octree),'int',+1) + allocate (olsf%x(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%x','main',size(olsf%x),'dp',+1) + allocate (olsf%y(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%y','main',size(olsf%y),'dp',+1) + allocate (olsf%z(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%z','main',size(olsf%z),'dp',+1) + allocate (olsf%lsf(olsf%nnode),stat=threadinfo%err) ; call heap (threadinfo,'olsf%lsf','main',size(olsf%lsf),'dp',+1) + allocate (olsf%icon(params%mpe,olsf%nleaves),stat=threadinfo%err) + call heap (threadinfo,'olsf%icon','main',size(olsf%icon),'int',+1) olsf%octree(1:olsf%noctree)=ov%octree(1:ov%noctree) olsf%x(1:olsf%nnode)=ov%x(1:ov%nnode) @@ -1258,8 +1304,10 @@ call heap (threadinfo,'ov%vnode','main',size(ov%vnode),'dp',-1) ; deallocat call heap (threadinfo,'ov%wnode','main',size(ov%wnode),'dp',-1) ; deallocate (ov%wnode) call heap (threadinfo,'ov%icon','main',size(ov%icon),'int',-1) ; deallocate (ov%icon) call heap (threadinfo,'ov%temp','main',size(ov%temp),'dp',-1) ; deallocate (ov%temp) -call heap (threadinfo,'ov%temporary_nodal...','main',size(ov%temporary_nodal_pressure),'dp',-1) ; deallocate (ov%temporary_nodal_pressure) -call heap (threadinfo,'ov%whole_leaf...','main',size(ov%whole_leaf_in_fluid),'bool',-1) ; deallocate (ov%whole_leaf_in_fluid) +call heap (threadinfo,'ov%temporary_nodal...','main',size(ov%temporary_nodal_pressure),'dp',-1) +deallocate (ov%temporary_nodal_pressure) +call heap (threadinfo,'ov%whole_leaf...','main',size(ov%whole_leaf_in_fluid),'bool',-1) +deallocate (ov%whole_leaf_in_fluid) do is=1,params%ns