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