PROGRAM icosa_newstart_lmdz !========================================= ! Author: J. Mauxion (JM in the following) ! Adapted from the icosa_lmdz program !========================================= USE icosa_init_mod, ONLY: icosa_init USE disvert_plugin_mod, ONLY: disvert_plugin USE disvert_icosa_lmdz_mod, ONLY: disvert_icosa_lmdz USE dissip_gcm_mod, ONLY: vert_prof_dissip_plugin USE vert_prof_dissip_icosa_lmdz_mod, ONLY: vert_prof_dissip_icosa_lmdz USE netcdf USE abort_mod, ONLY: dynamico_abort IMPLICIT NONE ! To correct iteration after restart is written INTEGER :: ncid, varid, ierr REAL :: iteration ! Set up plugins disvert_plugin => disvert_icosa_lmdz vert_prof_dissip_plugin => vert_prof_dissip_icosa_lmdz CALL icosa_init ! JM: in the newstart case, need to correct iteration stored in restart_icosa.nc ! Open file in write mode ierr=NF90_OPEN('restart_icosa.nc', NF90_WRITE, ncid) IF (ierr /= NF90_NOERR) then CALL dynamico_abort('Error opening file: '//trim(NF90_STRERROR(ierr))) ENDIF ! Get variable ID ierr = NF90_INQ_VARID(ncid, 'iteration', varid) IF (ierr /= NF90_NOERR) THEN CALL dynamico_abort('Error: variable iteration not found') ENDIF ! Read value ierr = NF90_GET_VAR(ncid, varid, iteration) IF (ierr /= NF90_NOERR) THEN CALL dynamico_abort('Error reading iteration: '//trim(nf90_strerror(ierr))) ENDIF ! Correct iteration as previous loop was "empty" (i.e. no real computation of dyn) iteration = iteration - 1. ! Write back ierr = NF90_PUT_VAR(ncid, varid, iteration) IF (ierr /= NF90_NOERR) THEN CALL dynamico_abort('Error writing iteration: '//trim(nf90_strerror(ierr))) ENDIF ! Close file ierr = NF90_CLOSE(ncid) IF (ierr /= NF90_NOERR) then CALL dynamico_abort('Error closing file: '//trim(NF90_STRERROR(ierr))) ENDIF END PROGRAM icosa_newstart_lmdz ! Dummy declaration required for dynamico's "phys_external" setup SUBROUTINE pre_initialize_external_physics END SUBROUTINE pre_initialize_external_physics