5. Règles de programmation#
Si le développeur a le libre choix dans l’utilisation et le nommage de ses paramètres de travail dans la structure de données dédiée ( sd_nl ), il reste toutefois obligatoire de respecter les règles suivantes afin de permettre aux processus d’archivage et de reprise de calcul de fonctionner correctement avec la nouvelle non-linéarité.
Le paramètre MX_LEVEL de la sd_nl doit être incrémenté dans la routine préparant les données dtmprep_noli _newf . Cela permet d’éviter l’écrasement de données lors de la combinaison de plusieurs non-linéarités.
Le paramètre NB_NONL de la sd_dtm doit également être incrémenté dans dtmprep_noli _newf . Cela permet d’activer globalement le calcul de forces non linéaires et l’archivage des variables internes associées.
Le paramètre NL_TYPE de la sd_nl doit être sauvegardé avec la valeur entière décrivant la non-linéarité traitée dans dtmprep_noli _newf . Cette valeur est définie dans le fichier nldef.h (par ex. NL_CHOC = 1, NL_BUCKLING = 2, etc.). Le paramètre NL_TYPE est requis dans dtmforc afin de dispatcher correctement vers la routine dtmforc _newf . L’utilisation d’un entier permet d’optimiser cette étape très répétitive dans la boucle d’intégration.
Les variables internes (réels) sont concaténées pour toutes les non linéarités et stockées sous le paramètre global INTERNAL_VARS de la sd_nl. Afin de ne pas écraser les variables des autres non linéarités,il est nécessaire de récupérer l’indice de sauvegarde généré et stocké automatiquement sous le paramètre INTERNAL_VARS_INDEX. En pratique:
call nlget(sd_nl, _INTERNAL_VARS , vr= vint )
call nlget(sd_nl, _INTERNAL_VARS_INDEX, vi= vindx )
start = vindx (nl_ind)
vint (start+0) = valeur1
vint (start+1) = valeur2
vint (start+2) = valeur3