From d56f17e72af8ed719f1c331053e9e32dde586efb Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Fri, 1 Feb 2019 16:06:34 +0100
Subject: [PATCH] Philippe 01/02/2019: bug correction in case XRT is not
 associated

---
 src/LIB/SURCOUCHE/src/mode_field.f90 | 151 ++++++++++++++++++---------
 1 file changed, 104 insertions(+), 47 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index 475b028fe..e0858d4b3 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -7,6 +7,7 @@
 !  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 ! Modifications:
 !  Philippe Wautelet: 29/01/2019 : small bug correction (null pointers) in FIELDLIST_GOTO_MODEL if NESPGD or PGD
+!  Philippe Wautelet: 01/02/2019 : bug correction in case XRT is not associated
 !-----------------------------------------------------------------
 MODULE MODE_FIELD
 !
@@ -3840,26 +3841,51 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('TKET', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(K
 CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XPABST
 CALL FIND_FIELD_ID_FROM_MNHNAME('RT',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X4D(KFROM)%DATA => XRT
 !
-IF (CONF_MODEL(KFROM)%IDX_RVT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RVT)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RCT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RCT)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RRT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RRT)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RIT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RIT)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RST>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RST',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RST)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RGT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RGT)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RHT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RHT)
+IF (ASSOCIATED(XRT)) THEN
+  IF (CONF_MODEL(KFROM)%IDX_RVT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RVT)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RCT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RCT)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RRT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RRT)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RIT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RIT)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RST>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RST',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RST)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RGT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RGT)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RHT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RHT)
+  END IF
+ELSE
+  IF (CONF_MODEL(KFROM)%IDX_RVT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RCT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RRT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RIT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RST>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RST',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RGT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RHT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+
 END IF
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('SUPSATMAX',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XSUPSAT
@@ -4126,33 +4152,64 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('TKET', IID,IRESP); XTKET  => TFIELDLIST(IID)%TF
 CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP); XPABST => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('RT',   IID,IRESP); XRT    => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA
 !
-IF (CONF_MODEL(KTO)%IDX_RVT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RVT)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RCT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RCT)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RRT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RRT)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RIT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RIT)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RST>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RST',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RST)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RGT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RGT)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RHT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RHT)
+IF (ASSOCIATED(XRT)) THEN
+  IF (CONF_MODEL(KTO)%IDX_RVT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RVT)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RCT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RCT)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RRT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RRT)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RIT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RIT)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RST>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RST',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RST)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RGT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RGT)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RHT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RHT)
+  END IF
+ELSE
+  IF (CONF_MODEL(KTO)%IDX_RVT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RCT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RRT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RIT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RST>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RST',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RGT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RHT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
 END IF
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('SUPSATMAX',IID,IRESP); XSUPSAT => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
-- 
GitLab