Skip to content
Snippets Groups Projects
stitch_nest.f90 2.64 KiB
Newer Older
  • Learn to ignore specific revisions
  • ! Stitch nest
    !
    ! Combines velocity fields from a coarse model and n nests at one level finer to
    ! update the surface positions and temperatures in the coarse model
    !
    ! dwhipp - 06/11
    
    program stitch_nest
    
    use definitions
    use threads
    
    implicit none
    
    
    include 'mpif.h'
    
    
    ! Variable type declaration
    character (len=4) :: cistep,cnnest
    
    double precision :: current_time,inc,step,total
    
    integer :: err,i,istep,material0,nnest
    
    type (box),dimension(:),allocatable :: boxes
    type (cloud),dimension(:),allocatable :: ss_cl
    type (cloud) :: ls_cl
    type (cross_section),dimension(:),allocatable :: sections
    type (face),dimension(6) :: cube_faces
    type (material),dimension(:),allocatable::mat
    type (nest_info) nest
    type (octreev),dimension(:),allocatable :: ss_ov
    type (octreev) ls_ov
    type (parameters) :: params
    type (sheet),dimension(:),allocatable :: ls_surf,ls_surf0,ss_surf,ss_surf0
    type (thread) :: threadinfo
    type (ziso) zi
    
    !-------------------------------------------------------------------------------
    
    write (*,*) 'Program started'
    
    
    call mpi_init(ierr)
    call mpi_comm_size (mpi_comm_world,nproc,ierr)
    call mpi_comm_rank (mpi_comm_world,iproc,ierr)
    
    
    ! Init some variables
    current_time=0.d0
    inc=0.d0
    step=0.d0
    total=0.d0
    
    ! Read/echo current time step and # of nests from command line
    call getarg (1,cistep)
    call getarg (2,cnnest)
    write (*,*) 'Received command line arguments:'
    write (*,*) 'istep = ',trim(cistep)
    write (*,*) 'nnest = ',trim(cnnest)
    
    ! Convert character values to integers
    write (istep,'(i)') cistep
    write (nnest,'(i)') cnnest
    
    ! Read the coarse model input file
    params%infile=trim('input_ls.txt')
    call read_controlling_parameters (params,threadinfo,'main')
    allocate (ls_surf  (params%ns),stat=err); if (err.ne.0) call stop_run ('Error alloc ls_surf in main$')
    allocate (ls_surf0 (params%ns),stat=err); if (err.ne.0) call stop_run ('Error alloc ls_surf0 in main$')
    call read_input_file (params,threadinfo,material0,mat,ls_surf,boxes,sections,  &
                          cube_faces,nest)
    
    ! Modify params%restartfile to read previous restart file
    if (istep > 1) then
      call int_to_char (cistep,4,istep-1)
      params%restartfile='OUT/time_'//cistep//'.bin'
    endif
    
    ! Read the previous coarse model restart file if istep > 1, define surface,
    ! cloud and ov
    call define_surface (params,ls_surf,threadinfo,total,step,inc,current_time)
    call define_cloud (ls_cl,params,zi)
    call define_ov (ls_ov,params,threadinfo)
    
    ! Read the coarse model restart file from the current time step
    
    ! Loop through fine model(s) and read their current restart files
    do i = 1,nnest
      ! Change params%infile
    enddo
    
    deallocate(ls_surf,ls_surf0)
    
    
    call mpi_finalize (ierr)
    
    
    ! Sign off
    write (*,*) 'Program execution complete'
    end